﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<iostream>
using namespace std;

//int main()
//{
//	cout << "Hello World" << endl;
//	return 0;
//}

//int main()
//{
//	printf("Hello World\n");
//	return 0;
//}
//namespace Yusei
//{
//	int rand = 10;
//};
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
//int main()
//{
//	printf("%p\n", rand);
//	printf("%d\n", Yusei::rand);
//	return 0;
//}

//namespace Add
//{
//	namespace FloatAdd
//	{
//		float _Add(float x, float y)
//		{
//			return x + y;
//		}
//	};
//	namespace IntAdd
//	{
//		int _Add(int x, int y)
//		{
//			return x + y;
//		}
//	};
//};

//int main()
//{
//	cout << "FloatAdd:" << Add::FloatAdd::_Add(3.0f,5.0f) << endl;
//	cout << "IntAdd:" << Add::IntAdd::_Add(3, 5) << endl;
//	return 0;
//}
//#include"test.h"
//namespace Stack
//{
//	void HPInit(HP* php)
//	{
//		assert(php);
//		php->arr = NULL;
//		php->size = php->capacity = 0;
//	}
//	void HPDestroy(HP* php)
//	{
//		assert(php);
//		if (php->arr)
//			free(php->arr);
//
//		php->arr = NULL;
//		php->size = php->capacity = 0;
//	}
//
//	void Swap(int* x, int* y)
//	{
//		int tmp = *x;
//		*x = *y;
//		*y = tmp;
//	}
//
//	void AdjustUp(HPDataType* arr, int child)
//	{
//		int parent = (child - 1) / 2;
//
//		while (child > 0)//不需要等于，child只要走到根节点的位置，根节点没有父节点不需要交换
//		{
//			//建大堆，>
//			//建小堆，<
//			if (arr[child] < arr[parent])
//			{
//				Swap(&arr[parent], &arr[child]);
//				child = parent;
//				parent = (child - 1) / 2;
//			}
//			else
//			{
//				break;
//			}
//		}
//
//	}
//
//	void HPPush(HP* php, HPDataType x)
//	{
//		assert(php);
//		//判断空间是否足够
//		if (php->size == php->capacity)
//		{
//			//扩容
//			int newCapacity = php->capacity == 0 ? 4 : 2 * php->capacity;
//			HPDataType* tmp = (HPDataType*)realloc(php->arr, newCapacity * sizeof(HPDataType));
//			if (tmp == NULL)
//			{
//				perror("realloc fail!");
//				exit(1);
//			}
//			php->arr = tmp;
//			php->capacity = newCapacity;
//		}
//		php->arr[php->size] = x;
//
//		AdjustUp(php->arr, php->size);
//
//		++php->size;
//	}
//
//	void AdjustDown(HPDataType* arr, int parent, int n)
//	{
//		int child = parent * 2 + 1;//左孩子
//		//while (parent < n)
//		while (child < n)
//		{
//			//小堆：找左右孩子中找最小的
//			//大堆：找左右孩子中找大的
//			if (child + 1 < n && arr[child] > arr[child + 1])
//			{
//				child++;
//			}
//			if (arr[child] < arr[parent])
//			{
//				Swap(&arr[child], &arr[parent]);
//				parent = child;
//				child = parent * 2 + 1;
//
//			}
//			else
//			{
//				break;
//			}
//		}
//	}
//
//	void HPPop(HP* php)
//	{
//		assert(php && php->size);
//
//		//arr[0]  arr[size-1]
//		Swap(&php->arr[0], &php->arr[php->size - 1]);
//
//		--php->size;
//
//		AdjustDown(php->arr, 0, php->size);
//
//
//	}
//	// 判空
//	bool HPEmpty(HP* php)
//	{
//		assert(php);
//		return php->size == 0;
//	}
//
//	HPDataType HPTop(HP* php)
//	{
//		assert(php && php->size);
//
//		return php->arr[0];
//	}
//
//};
//namespace Yusei
//{
//	int a = 10;
//	int b = 20;
//};
//using namespace Yusei;
//int main()
//{
//	cout << a << endl;
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c << std::endl;
//	scanf("%d%lf", &a, &b);
//	printf("%d %lf\n", a, b);
//	// 可以⾃动识别变量的类型
//	cin >> a;
//	cin >> b >> c;
//	cout << a << endl;
//	cout << b << " " << c << endl;
//	return 0;
//}

//#include <iostream>
//#include <assert.h>
//using namespace std;
//void Func(int a, int b, int c=12);
//void Func(int a,int b,int c)
//{
//	cout << a <<' ' << b << ' '<< c << endl;
//}
//int main()
//{
//	Func(10,11);//全传
//	return 0;
//}

//#include<iostream>
//using namespace std;
//// 1、参数类型不同
//int Add(int left, int right)
//{
//	cout << "int Add(int left, int right)" << endl;
//	return left + right;
//}
//double Add(double left, double right)
//{
//	cout << "double Add(double left, double right)" << endl;
//	return left + right;
//}
//
//int main()
//{
//	Add(3, 5);
//	Add(2.7, 3.5);
//	return 0;
//}

// 2、参数个数不同
//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a)
//{
//	cout << "f(int a)" << endl;
//}
//
//int main()
//{
//	f();
//	f(0);
//	return 0;
//}

//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a=10)
//{
//	cout << "f(int a)" << endl;
//}
//
//int main()
//{
//	f();
//	f();
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	// 引⽤：b和c是a的别名
//	int& b = a;
//	int& c = a;
//	// 也可以给别名b取别名，d相当于还是a的别名
//	int& d = b;
//	++d;
//	// 这⾥取地址我们看到是⼀样的
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 10;
//	//error
//	//int& ra;
//	int& b = a;
//	int c = 10;
//	b = c;//并非改变b的指向，而是赋值
//	return 0;
//}

//typedef struct ListNode
//{
//	int val;
//	struct ListNode* next;
//}LTNode, * PNode;//展开typedef struct ListNode* PNode;
//void ListPushBack(PNode& phead, int x)
//{
//	PNode newnode = (PNode)malloc(sizeof(LTNode));
//	newnode->val = x;
//	newnode->next = NULL;
//	if (phead == NULL)
//	{
//		phead = newnode;
//	}
//	else
//	{
//		PNode pcur = phead;
//		while (pcur->next)
//		{
//			pcur = pcur->next;
//		}
//		pcur->next = newnode;
//	}
//}

//#define N 5
//N++;
//int* arrBackPointer(int* arr)
//{
//	return &arr[0];
//}
//int& arrBack(int* arr)
//{
//	return arr[0];
//}
//int arrBackError(int* arr)
//{
//	return arr[0];
//}
//int main()
//{
//	int* arr = (int*)malloc(sizeof(int) * 5);
//	arr[0] = 5;
//	arrBack(arr)++;
//	printf("%d\n",arr[0]);
//	(*arrBackPointer(arr))++;
//	printf("%d\n", arr[0]);
//	printf("%d\n", arr[0]);
//	return 0;
//}
//int& randomnum()
//{
//	int x = rand();
//	printf("true number:%d", x);
//	return x;
//}
//int main()
//{
//	int a = 10;
//	printf("%d", randomnum());
////}
//
//int& func()
//{
//	int ret = 10;
//	ret++;
//	return ret;
//}
//int main()
//{
//	printf("%d\n", func);
//	return 0;
//}
//int main()
//{
//	int a = 10;
//	int* p = &a;
//	int& b = a;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//inline int Add(int x, int y)
//{
//	int ret = x + y;
//	ret += 1;
//	ret += 1;
//	ret += 1;
//	return ret;
//}
//int main()
//{
//	// 可以通过汇编观察程序是否展开
//	// 有call Add语句就是没有展开，没有就是展开了
//	int ret = Add(1, 2);
//	cout << Add(1, 2) * 5 << endl;
//	return 0;
//}

void f(int x)
{
	cout << "f(int x)" << endl;
	return;
}
void f(int*x)
{
	cout << "f(int*x)" << endl;
	return;
}
int main()
{
	f(0);
	f(NULL);
	f(nullptr);
	return 0;
}